<?php
/**@ingroup boleto
 * @brief Classe contendo o Controle dos Boletos do sistema
 */

class Default_BoletoController extends Zend_Controller_Action
{

    public $totalRegistros = 40;

    public function setProgress( $count )
    {
            $this->progress = $count;
    }

    /**
     * Função contrutora da classe, não possui nenhum processo no momento
     */
    public function init()
    {
        /* Initialize action controller here */        
    }
	
	/**
     * Função que efetua cadastro de boleto
     */
    public function cadastroboletoAction()
    {
        $this->view->breadcump1 = strtoupper($this->getRequest()->getControllerName());
        $this->view->breadcump2 = "Cadastro de Boleto";

        $formBoleto = new Benservi_Forms_DadosBoleto();
        $formProduto = new Benservi_Forms_BoletoProduto();
        
        $dadosBoleto = new Application_Model_DbTable_Boleto();
        $produtos = new Application_Model_DbTable_BoletoProduto();

        /*Caso seja request via POST efetua processo para inserção no banco*/
        if($this->_request->isPost())
        {            
            if ($formBoleto->isValid($this->_request->getPost())) {
                $dataBoleto = $this->_request->getPost();
                unset($dataBoleto['Salvar']);

                /*Ajusta a data para insercão no banco*/
                $vencimento = explode('/', $dataBoleto["vencimento"]);
                $dataBoleto['vencimento'] = $vencimento[2].'-'.$vencimento[1].'-'.$vencimento[0];

                /*Verifico se a data de vencimento é valida*/
                $val = checkdate($vencimento[1], $vencimento[0], $vencimento[2]);
                if(!$val){
                    $this->view->error = "Por favor, informe uma data de vencimento válida no formato (dd/mm/AAAA)";
                }
                else{
                    /*Verifico se este boleto ja existe*/
                    if($dadosBoleto->getNumeroBoleto($dataBoleto['numero'],$dataBoleto['id']) > 0){
                       $this->view->error = "Atenção, já existe um boleto com o numero ".$dataBoleto['numero'];
                    }
                    /*Caso as validações estiverem ok, insere no banco*/
                    else{
                        $dataBoleto['id'] = $this->cadUpdBoleto($dataBoleto);
                        $this->view->success = "Boleto cadastrado com sucesso";
                    }
                }
                /*Ajusta a data para exibir na tela*/
                $dataBoleto['vencimento'] = $vencimento[0].'/'.$vencimento[1].'/'.$vencimento[2];
                $formBoleto->populate($dataBoleto);

                /*exibe o cadastro dos produtos*/
                if( $dataBoleto['id'] <> ''){
                     $formProduto->getElement('boleto')->setValue($dataBoleto['numero']);
                     $this->view->idBoleto = $dataBoleto['id'];                     
                     $select = $produtos->select()->where('boleto = '.$dataBoleto['numero']);
                     $produtoRow = $produtos->fetchAll($select);
                     $this->view->produtos = $produtoRow;
                }
            }
        }

        /*Caso seja enviado parametro via GET verifica se é um boleto, se for busca no banco o boleto e exibe na tela*/
        if(($this->_request->isGet()) && ($this->_request->getParam('boleto') <> ''))
        {
            $boleto = $this->_request->getParam('boleto');

            $select = $dadosBoleto->select()->where('numero = '.$boleto);
            $boletoRow = $dadosBoleto->fetchAll($select)->current();

            /*Ajusta a data para exibir na tela*/
            $vencimento = explode('-', $boletoRow->vencimento);
            $boletoRow->vencimento = $vencimento[2].'/'.$vencimento[1].'/'.$vencimento[0];

            $formBoleto->populate($boletoRow->toArray());
            $this->view->idBoleto = $boletoRow->id;
            $formProduto->getElement('boleto')->setValue($boletoRow->numero);

            $select = $produtos->select()->where('boleto = '.$boleto);
            $produtoRow = $produtos->fetchAll($select);
            $this->view->produtos = $produtoRow;                        
        }

        $this->view->formBoleto = $formBoleto;
        $this->view->formProduto = $formProduto;
    } 

    private function cadUpdBoleto($dataBoleto)
    {        
        $dadosBoleto = new Application_Model_DbTable_Boleto();

        /*Altera virgula por ponto caso exista no valor*/
        $dataBoleto['valor'] =  str_replace(",", ".", $dataBoleto['valor']);

        /*efetua um uppercase em todos os valors do array*/
        $dataBoleto = array_map("strtoupper", $dataBoleto);

        if($dataBoleto['id'] == ''){
            $id = $dadosBoleto->insert($dataBoleto);
            Benservi_Log_Log::factory("Boleto cadastrado: ".$dataBoleto['numero'], Zend_Log::INFO, $this->getRequest()->getControllerName());
            $dataBoleto['id'] = $id;
        }
        else{
            $where['id = ?'] = $dataBoleto['id'];
            $dadosBoleto->update($dataBoleto, $where);
            Benservi_Log_Log::factory("Alteração do boleto: ".$dataBoleto['numero'], Zend_Log::INFO, $this->getRequest()->getControllerName());
        }
        return $dataBoleto['id'];
    }
             

    public function findAction()
    {

        $this->view->breadcump1 = strtoupper($this->getRequest()->getControllerName());
        $this->view->breadcump2 = "Localizar Boleto";
        $form = new Benservi_Forms_Consulta();        
       
        $dadosBoleto = new Application_Model_DbTable_Boleto();

        if(($this->_request->isGet()) and ($this->_request->getParam('cpf') <> '')){

            $select = $dadosBoleto->select()->where('cpf = "'.$this->_request->getParam('cpf').'"');
            $boletoRow = $dadosBoleto->fetchAll($select);
            $this->view->boletos = $boletoRow;
            $form->getElement('cpf')->setValue($this->_request->getParam('cpf'));
        }

        $this->view->form = $form;
    }

    public function deleteboletoAction()
    {
        $boleto = new Application_Model_DbTable_Boleto();
        $boletoProduto = new Application_Model_DbTable_BoletoProduto();

        if($this->_request->getParam('numero') <> ''){           

            $select = $boleto->select()->where('numero = '.$this->_request->getParam('numero'));
            $boletoRow = $boleto->fetchAll($select)->current();

            $where = 'numero = '.$this->_request->getParam('numero');
            $boleto->delete($where);

            $where = 'boleto = '.$this->_request->getParam('numero');
            $boletoProduto->delete($where);

            Benservi_Log_Log::factory("Boleto removido: ".$boletoRow->numero, Zend_Log::INFO, $this->getRequest()->getControllerName());
            $this->_redirect("/boleto/find?submit=Consultar&cpf=".$this->_request->getParam('cpf'));

        }
    }

    
     /**
     * Função que remove um produto do boleto (Ajax)
     */
    public function delprodutoboletoAction()
    {
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender();

        $id = $this->_request->getParam('id');
        $boleto = $this->_request->getParam('boleto');

        
        $produtos = new Application_Model_DbTable_BoletoProduto();

        $where = 'id = '.$id;
        $produtos->delete($where);

        $select = $produtos->select()->where("boleto = ".$boleto);
        $produtosRow = $produtos->fetchAll($select);

        $html = '<div id="tabelaProd">
                    <table class="normal" style="" cellpadding="0" cellspacing="0" border="0">
                        <thead>
                            <td width="100px">Boleto</td>
                            <td width="390px">Produto</td>
                            <td width="100px">Valor</td>
                            <td width="50px">Ação</td>
                        </thead>
                        <tbody>';

        foreach ($produtosRow as $produto){
            $html.= '<tr>
                        <td>'.$produto->boleto.'</td>
                        <td>'.$produto->produto.'</td>
                        <td>'.number_format($produto->valor , 2, ",", ".").'</td>
                        <td>
                            <a title="Excluir" lang="'.$produto->id.'" href="#" class="delprod"><img src="/sistema/interno/assets/icons/cross.png"></a>
                        </td>
                    </tr>';
        }

        $html .= '</tbody>
                    </table>';
       // $json = Zend_Json::encode($dados);
        echo $html;
    }


    /**
     * Função que adciona um produto no boleto (Ajax)
     */
    public function addprodutoboletoAction()
    {
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender();

        $boleto = $this->_request->getParam('boleto');
        $produto = $this->_request->getParam('produto');
        $valor = str_replace(",", ".", $this->_request->getParam('valor'));

        $data = array();
        $data['boleto'] = $boleto;
        $data['produto'] = strtoupper($produto);
        $data['valor'] = $valor;       

        $produtos = new Application_Model_DbTable_BoletoProduto();
        $produtos->insert($data);

        $select = $produtos->select()->where("boleto = ".$boleto);
        $produtosRow = $produtos->fetchAll($select);

        $html = '<div id="tabelaProd">
                    <table class="normal" style="" cellpadding="0" cellspacing="0" border="0">
                        <thead>
                            <td width="100px">Boleto</td>
                            <td width="390px">Produto</td>
                            <td width="100px">Valor</td>
                            <td width="50px">Ação</td>
                        </thead>
                        <tbody>';

        foreach ($produtosRow as $produto){
            $html.= '<tr>
                            <td>'.$produto->boleto.'</td>
                            <td>'.$produto->produto.'</td>
                            <td>'.number_format($produto->valor , 2, ",", ".").'</td>
                            <td>
                                <a title="Excluir" lang="'.$produto->id.'" href="#" class="delprod"><img src="/sistema/interno/assets/icons/cross.png"></a>
                            </td>
                        </tr>';
        }

        $html .= '</tbody>
                    </table>';       
        echo $html;
    }

    /**
     * Função que remove todos os boletos cadastrados
     * @return jSon
     */
    public function removeAction() {
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender();
        
        $boleto = new Application_Model_DbTable_Boleto();
        $produto = new Application_Model_DbTable_BoletoProduto();

        $boleto->delete(null);
        $produto->delete(null);

        $data = array();
        $data['success'] = "Boletos excluídos com sucesso!";

        $json = Zend_Json::encode($data);
        echo $json;
    }

    /**
     * Função que controla o arquivo index do processo de Boleto do sistema
     */
    public function indexAction()
    {

        $breadcumb_1 = $this->getRequest()->getControllerName();
        $breadcumb_2 = 'Histórico';

        $log = new Application_Model_DbTable_Log();
        $select = $log->select()->where('controller = "'.$this->getRequest()->getControllerName().'"')->order("horario DESC")->limit(15);


        $this->view->log = $log->fetchAll($select);
        $this->view->breadcump1 = strtoupper($breadcumb_1);
        $this->view->breadcump2 = $breadcumb_2;

    }
 
    /**
     * Função que controla a Administração de Boletos
     */
    public function admboletoAction()
    {
        $breadcumb_1 = $this->getRequest()->getControllerName();
        $breadcumb_2 = 'Administração de Boletos';
        $this->view->breadcump1 = strtoupper($breadcumb_1);
        $this->view->breadcump2 = $breadcumb_2;
    }

     /**
     * Função que controla a Administração de Bancos
     */
    public function admbancoAction()
    {
        $breadcumb_1 = $this->getRequest()->getControllerName();
        $breadcumb_2 = 'Administração de Bancos';

        $bancos = new Application_Model_DbTable_Banco();        

        $this->view->breadcump1 = strtoupper($breadcumb_1);
        $this->view->breadcump2 = $breadcumb_2;
        $this->view->bancos = $bancos->fetchAll();
    }


     /**
     * Função que controla o Upload dos Produtos do boleto bancário
     */
    public function uploadprodutoAction()
    {
        $breadcumb_1 = $this->getRequest()->getControllerName();
        $breadcumb_2 = 'Upload Info Produtos';

        $this->view->breadcump1 = strtoupper($breadcumb_1);
        $this->view->breadcump2 = $breadcumb_2;

        $form = new Benservi_Forms_File();

        $boletoProduto = new Application_Model_DbTable_BoletoProduto();

        if($this->_request->isPost()){
            if ($form->isValid($this->_request->getPost())) {
                  try {
                        Benservi_Log_Log::factory("Iniciado upload Info. Produtos", Zend_Log::INFO, $this->getRequest()->getControllerName());
                        $form->file->receive();
                        $fp = fopen($form->file->getFileName(), "r");

                        $texto = "";
                        while (!feof($fp)){
                          $texto .= fgetc($fp);
                        }
                        fclose($fp);

                        $dados = explode(';n',$texto);

                        $insert = 0;
                        $notInsert = 0;

                        $ourFileName = "error/errorProdutos.txt";
                        $ourFileHandle = fopen($ourFileName, 'w');
                        $linha = "";

                        fwrite($ourFileHandle, utf8_encode("Produtos que tiveram problemas ao ser Cadastrado\r\n\r\n\r\n"));
                        fwrite($ourFileHandle, "Boleto - Produto\r\n");

                        for($pageIndex = 0; $pageIndex < sizeof($dados)-1; $pageIndex++){
                            $aux = explode(";", $dados[$pageIndex]);
                          
                            $dadosBoletoProduto["boleto"] = preg_replace("/[^0-9]/","", trim($aux[0]));
                            $dadosBoletoProduto["produto"] = $aux[1];
                            $dadosBoletoProduto["valor"] = $aux[2];

                            if($boletoProduto->getProdutoBoleto($dadosBoletoProduto["produto"], $dadosBoletoProduto["boleto"]) == 0){
                                $boletoProduto->insert($dadosBoletoProduto);
                                $insert += 1;
                            }
                            else{
                                $notInsert += 1;
                                $linha = $dadosBoletoProduto["boleto"].' - '.$dadosBoletoProduto["produto"]."\r\n";
                                fwrite($ourFileHandle, $linha);
                            }

                        }
                        Benservi_Log_Log::factory("Upload Info. Produtos realizado com sucesso", Zend_Log::INFO, $this->getRequest()->getControllerName());
                        $this->view->confirm = 'Upload efetuado com sucesso!';

                        fclose($ourFileHandle);

                        $this->view->insert = $insert;
                        $this->view->notInsert = $notInsert;
                        $this->view->arquivo = '/sistema/interno/'.$ourFileName;
                  } catch (Exception $e) {
                     Benservi_Log_Log::factory($e->getMessage(), Zend_Log::ERR, $this->getRequest()->getControllerName());
                     $this->view->error = $e->getMessage();
                  }
            }
        }

        $this->view->form = $form;
    }

    /**
     * Função que controla o cadastro dos dados Bancários
     */
    public function infobancoAction()
    {

        $breadcumb_1 = $this->getRequest()->getControllerName();
        $breadcumb_2 = 'Administração de Bancos';
        $breadcumb_3 = 'Dados Bancários';

        $form = new Benservi_Forms_InfoBanco();

        $banco = new Application_Model_DbTable_Banco();
        $select = $banco->select()->where("codigo = ".$this->_request->getParam("codigo"));
        $bancoRow = $banco->fetchAll($select)->current();

        $dadosBanco = new Application_Model_DbTable_DadosBanco();
        $dadosBancoRelac = $bancoRow->findDependentRowset("Application_Model_DbTable_DadosBanco");
       
        if($dadosBancoRelac->count() <> 0){
            foreach ($dadosBancoRelac as $dadosBancoItem){
                $data['banco_id'] = $bancoRow->id;
                $data['banco'] = $bancoRow->nome;
                $data['agencia'] = $dadosBancoItem->agencia;
                $data['conta'] = $dadosBancoItem->conta;
                $data['carteira'] = $dadosBancoItem->carteira;
                $data['cedente'] = $dadosBancoItem->cedente;
                $data['cpf_cnpj'] = $dadosBancoItem->cpf_cnpj;
                $data['nummoeda'] = $dadosBancoItem->nummoeda;
                $data['especie'] = $dadosBancoItem->especie;
                $data['convenio'] = $dadosBancoItem->convenio;
                $data['contrato'] = $dadosBancoItem->contrato;
            }              
        }
        else{
                $data['banco_id'] = $bancoRow->id;
                $data['banco'] = $bancoRow->nome;
                $data['agencia'] = "";
                $data['conta'] = "";
                $data['carteira'] = "";
                $data['cedente'] = "";
                $data['nummoeda'] = 9;
                $data['especie'] = "R$";
                $data['cpf_cnpj'] = "";
                $data['convenio'] = "";
                $data['contrato'] = "";
        }

        $form->populate($data);

        if($this->_request->isPost()){
            if ($form->isValid($this->_request->getPost())) {
                $data = $this->_request->getPost();
                unset($data['Salvar']);
                unset($data['banco']);                

                if($dadosBanco->getDadosBanco($bancoRow->id) <> 0){
                    $table = new Zend_Db_Table('dadosbanco');
                    $table->update($data, 'banco_id = '.$bancoRow->id);
                    Benservi_Log_Log::factory("Atualizado os dados do banco ".$bancoRow->nome, Zend_Log::INFO, $this->getRequest()->getControllerName());
                }
                else{
                    $dadosBanco->insert($data);
                     Benservi_Log_Log::factory("Inserido o banco ".$bancoRow->nome, Zend_Log::INFO, $this->getRequest()->getControllerName());
                }

                $this->view->confirm = 'Operação efetuada com sucesso!';
            }
        }

        $this->view->breadcump1 = strtoupper($breadcumb_1);
        $this->view->breadcump2 = $breadcumb_2;
        $this->view->breadcump3 = $breadcumb_3;
        $this->view->form = $form;

    }

     /**
     * Função que controla a consulta de boletos
     */
    public function consultaAction()
    {

        $breadcumb_1 = $this->getRequest()->getControllerName();
        $breadcumb_2 = 'Consulta de Boletos';
        $form = new Benservi_Forms_Consulta();
        $form->setMethod("GET");

        $this->view->form = $form;
        $this->view->breadcump1 = strtoupper($breadcumb_1);
        $this->view->breadcump2 = $breadcumb_2;

    }

    /**
     * Função que controla o Upload dos boletos bancários pelo processo automatico
     */
    public function updateboletoAction()
    {
        $this->_helper->layout->setLayout("layoutupdate");
        $boleto = new Application_Model_DbTable_Boleto();
        try {
            Benservi_Log_Log::factory("Iniciado upload Info. Boletos", Zend_Log::INFO, $this->getRequest()->getControllerName(), 'Auto Update');

            $fp = fopen('../boletos.txt', "r");
            

            $texto = "";
            while (!feof($fp)){
              $texto .= fgetc($fp);
            }
            fclose($fp);
            

            $dados = explode(';n',$texto);

            $insert = 0;
            $notInsert = 0;

            $ourFileName = "error/errorBoletos.txt";
            $ourFileHandle = fopen($ourFileName, 'w');
            $linha = "";

            fwrite($ourFileHandle, utf8_encode("Boletos que tiveram problemas ao ser Cadastrado\r\n\r\n\r\n"));
            fwrite($ourFileHandle, "Numero - CPF\r\n");

            for($pageIndex = 0; $pageIndex < sizeof($dados)-1; $pageIndex++){
                $aux = explode(";", $dados[$pageIndex]);

                $dadosBoleto["cpf"] = preg_replace("/[^0-9]/","", trim($aux[0]));
                $dadosBoleto["nome"] = $aux[1];
                $dadosBoleto["numero"] = $aux[2];

                $data = explode("/", $aux[3]);

                $dadosBoleto["vencimento"] = $data[2].'/'.$data[1].'/'.$data[0];
                $dadosBoleto["valor"] = $aux[4];
                $dadosBoleto["juros"] = $aux[5];
                $dadosBoleto["multa"] = $aux[6];
                $dadosBoleto["endereco"] = $aux[7];
                $dadosBoleto["cidade"] = $aux[8];
                $dadosBoleto["uf"] = $aux[9];
                $dadosBoleto["cep"] = $aux[10];
                $dadosBoleto["juros"] = $aux[11];
                $dadosBoleto["demo1"] = $aux[12];
                $dadosBoleto["demo2"] = $aux[13];
                $dadosBoleto["demo3"] = $aux[14];
                $dadosBoleto["instru1"] = $aux[15];
                $dadosBoleto["instru2"] = $aux[16];
                $dadosBoleto["instru3"] = $aux[17];
                $dadosBoleto["instru4"] = $aux[18];
                $dadosBoleto["instru5"] = $aux[19];
                $dadosBoleto["opcional"] = $aux[19];

                if($boleto->getNumeroBoleto($dadosBoleto["numero"], $dadosBoleto["cpf"]) == 0){
                    $boleto->insert($dadosBoleto);
                    $insert += 1;
                }
                else{
                    $notInsert += 1;
                    $linha = $dadosBoleto["numero"].' - '.$dadosBoleto["cpf"]."\r\n";
                    fwrite($ourFileHandle, $linha);
                }
            }
            Benservi_Log_Log::factory("Upload Info. Boletos realizado com sucesso", Zend_Log::INFO, $this->getRequest()->getControllerName());
            $this->view->confirm = 'Upload efetuado com sucesso!';
            fclose($ourFileHandle);

            $this->view->insert = $insert;
            $this->view->notInsert = $notInsert;
            $this->view->arquivo = '/sistema/interno/'.$ourFileName;
                       
      } catch (Exception $e) {
         Benservi_Log_Log::factory($e->getMessage(), Zend_Log::ERR, $this->getRequest()->getControllerName(), 'Auto Update');
         $this->view->error = $e->getMessage();
      }
    }

     /**
     * Função que controla o Upload dos boletos pelo processo interno
     */
    public function uploadboletoAction()
    {              
        $breadcumb_1 = $this->getRequest()->getControllerName();
        $breadcumb_2 = 'Upload Info Boleto';

        $this->view->breadcump1 = strtoupper($breadcumb_1);
        $this->view->breadcump2 = $breadcumb_2;

        $form = new Benservi_Forms_File();
                        
        $boleto = new Application_Model_DbTable_Boleto();

        if($this->_request->isPost()){
            if ($form->isValid($this->_request->getPost())) {                
                  try {
                        Benservi_Log_Log::factory("Iniciado upload Info. Boletos", Zend_Log::INFO, $this->getRequest()->getControllerName());
                        $form->file->receive();
                        $fp = fopen($form->file->getFileName(), "r");

                        $texto = "";
                        while (!feof($fp)){
                          $texto .= fgetc($fp);
                        }
                        fclose($fp);

                        $dados = explode(';n',$texto);

                        $insert = 0;
                        $notInsert = 0;

                        $ourFileName = "error/errorBoletos.txt";
                        $ourFileHandle = fopen($ourFileName, 'w');
                        $linha = "";
                        
                        fwrite($ourFileHandle, utf8_encode("Boletos que tiveram problemas ao ser Cadastrado\r\n\r\n\r\n"));
                        fwrite($ourFileHandle, "Numero - CPF\r\n");

                        for($pageIndex = 0; $pageIndex < sizeof($dados)-1; $pageIndex++){
                            $aux = explode(";", $dados[$pageIndex]);

                            $dadosBoleto["cpf"] = preg_replace("/[^0-9]/","", trim($aux[0]));
                            $dadosBoleto["nome"] = $aux[1];
                            $dadosBoleto["numero"] = $aux[2];

                            $data = explode("/", $aux[3]);

                            $dadosBoleto["vencimento"] = $data[2].'/'.$data[1].'/'.$data[0];
                            $dadosBoleto["valor"] = $aux[4];
                            $dadosBoleto["juros"] = $aux[5];
                            $dadosBoleto["multa"] = $aux[6];
                            $dadosBoleto["endereco"] = $aux[7];
                            $dadosBoleto["cidade"] = $aux[8];
                            $dadosBoleto["uf"] = $aux[9];
                            $dadosBoleto["cep"] = $aux[10];                            
                            $dadosBoleto["demo1"] = $aux[11];
                            $dadosBoleto["demo2"] = $aux[12];
                            $dadosBoleto["demo3"] = $aux[13];
                            $dadosBoleto["instru1"] = $aux[14];
                            $dadosBoleto["instru2"] = $aux[15];
                            $dadosBoleto["instru3"] = $aux[16];
                            $dadosBoleto["instru4"] = $aux[17];
                            $dadosBoleto["instru5"] = $aux[18];
                            $dadosBoleto["opcional"] = $aux[19];

                            if($boleto->getNumeroBoleto($dadosBoleto["numero"], $dadosBoleto["cpf"]) == 0){
                                $boleto->insert($dadosBoleto);
                                $insert += 1;
                            }
                            else{
                                $notInsert += 1;
                                $linha = $dadosBoleto["numero"].' - '.$dadosBoleto["cpf"]."\r\n";                                
                                fwrite($ourFileHandle, $linha);
                            }
                        }
                        Benservi_Log_Log::factory("Upload Info. Boletos realizado com sucesso", Zend_Log::INFO, $this->getRequest()->getControllerName());
                        $this->view->confirm = 'Upload efetuado com sucesso!';
                        fclose($ourFileHandle);
                       
                        $this->view->insert = $insert;
                        $this->view->notInsert = $notInsert;
                        $this->view->arquivo = '/sistema/interno/'.$ourFileName;
                  } catch (Exception $e) {                     
                     Benservi_Log_Log::factory($e->getMessage(), Zend_Log::ERR, $this->getRequest()->getControllerName());
                     $this->view->error = $e->getMessage();
                  }
            }            
        }                      
       
        $this->view->form = $form;
      
    }

     /**
     * Função que controla o cadastro de um novo banco no sistema
     */
    public function novobancoAction()
    {
        $breadcumb_1 = $this->getRequest()->getControllerName();
        $breadcumb_2 = 'Administração de Bancos';
        $breadcumb_3 = 'Novo';

        $banco = new Application_Model_DbTable_Banco();

        $form = new Benservi_Forms_Banco();
        if($this->_request->isPost()){
            if ($form->isValid($this->_request->getPost())) {                    
                    $data = $this->_request->getParams();
                    unset ($data['Salvar']);

                    unset ($data['controller']);
                    unset ($data['action']);
                    unset ($data['module']);

                    $banco->insert($data);
                    $this->_redirect('malote/admbanco');
            }
        }

        $this->view->form = $form;
        $this->view->breadcump1 = strtoupper($breadcumb_1);
        $this->view->breadcump2 = $breadcumb_2;
        $this->view->breadcump3 = $breadcumb_3;
        
    }

     /**
     * Função que formata os numeros para a geração dos boletos bancários no sistema
     */
    private function formata_numero($numero,$loop,$insert,$tipo = "geral") {
	if ($tipo == "geral") {
		$numero = str_replace(",","",$numero);
		while(strlen($numero)<$loop){
			$numero = $insert . $numero;
		}
	}
	if ($tipo == "valor") {
		$numero = str_replace(",","",$numero);
		while(strlen($numero)<$loop){
			$numero = $insert . $numero;
		}
	}
	if ($tipo == "convenio") {
		while(strlen($numero)<$loop){
			$numero = $numero . $insert;
		}
	}
	return $numero;
    }



    public function progressbarAction()
    {        
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender();

        $progressSession = new Zend_Session_Namespace('Progress');                

        $data = array();
        $data['count'] = $progressSession->count;

        if($progressSession->count == 100)
            unset($progressSession->count);

        $json = Zend_Json::encode($data);
        echo $json;
    }
     /**
     * Função que controla a geração do boleto Santander no sistema
     */
    public function geraboletosantanderAction()
    {
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender();
        try {
               // $codigo = $this->_request->getPost();

                $santander = new Benservi_Boleto_Santander();

                $codigobanco = '33';//$codigo['banco'];
               // $codigo_banco_com_dv = $boleto->geraCodigoBanco($codigobanco);

                $banco = new Application_Model_DbTable_Banco();
                $select = $banco->select()->where("codigo = ".$codigobanco);
                $bancoRow = $banco->fetchAll($select)->current();

                $pdf = Zend_Pdf::load($bancoRow->layout);
                $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
                $template1 = $pdf->pages[0];
                $template2 = $pdf->pages[1];

                $infoBanco = $bancoRow->findDependentRowSet("Application_Model_DbTable_DadosBanco");

                foreach ($infoBanco as $info)
                {
                    // DADOS PERSONALIZADOS - SANTANDER BANESPA
                    $santander->dadosboleto["codigo_cliente"] = $conta = $info->conta; // Código do Cliente (PSK) (Somente 7 digitos)
                    $santander->dadosboleto["ponto_venda"] = $agencia = $info->agencia; // Ponto de Venda = Agencia
                    $santander->dadosboleto["carteira"] = $carteira = $info->carteira;  // Cobrança Simples - SEM Registro
                    $santander->dadosboleto["carteira_descricao"] = "COBRANÇA SIMPLES - CSR";  // Descrição da Carteira
                }

                $boleto = new Application_Model_DbTable_Boleto();

                $pageIndex = 0;

                $data=date("Y/m/d");
                $result = $boleto->select()->where('vencimento > "'.$data.'" and cep <> ""')->order('nome ASC');
                $total = $boleto->fetchAll($result)->count();
                $page = $this->_request->getParam('page');
                $paginator = Zend_Paginator::factory($result);
                $paginator->setItemCountPerPage($this->totalRegistros);
                $paginator->setCurrentPageNumber($page);
                
                foreach ($paginator as $boletoRow){                    
                    $pagina = $pageIndex + 1;
                    $paginaTpl1 = ($pagina * 2) -1;
                    $paginaTpl2 = $pagina * 2;
                                                                              

                    // DADOS DO BOLETO PARA O SEU CLIENTE
                    $santander->dadosboleto["nosso_numero"] = $this->formata_numero($boletoRow->numero,7,0,"geral");;  // Nosso numero sem o DV - REGRA: Máximo de 7 caracteres!
                    $santander->dadosboleto["numero_documento"] = $boletoRow->numero;	// Num do pedido ou nosso numero

                    $data_venc = explode("-", $boletoRow->vencimento);

                    $santander->dadosboleto["data_vencimento"] = $data_venc[2].'/'.$data_venc[1].'/'.$data_venc[0]; // Data de Vencimento do Boleto - REGRA: Formato DD/MM/AAAA
                    $santander->dadosboleto["data_documento"] = date("d/m/Y"); // Data de emissão do Boleto
                    $santander->dadosboleto["data_processamento"] =  date("d/m/Y"); // Data de processamento do boleto (opcional)
                    $santander->dadosboleto["valor_boleto"] = number_format(str_replace(",", ".",$boletoRow->valor), 2, ',', ''); 	// Valor do Boleto - REGRA: Com vírgula e sempre com duas casas depois da virgula

                    // ---------------------- DADOS FIXOS DE CONFIGURAÇÃO DO SEU BOLETO --------------- //
                    //

                    // SEUS DADOS
                    $santander->dadosboleto["identificacao"] = "BoletoPhp - Código Aberto de Sistema de Boletos";
                    $santander->dadosboleto["cpf_cnpj"] = "";
                    $santander->dadosboleto["endereco"] = "Coloque o endereço da sua empresa aqui";
                    $santander->dadosboleto["cidade_uf"] = "Cidade / Estado";
                    $santander->dadosboleto["cedente"] = "Coloque a Razão Social da sua empresa aqui";

                    $linha = $santander->factory();


                    $bc = Zend_Barcode::factory(
                        'Code25interleaved',
                        'image',
                        array(
                            'text' => $santander->dadosboleto["codigo_barras"],
                            'font' => 2,
                            'drawText' => FALSE
                        )
                    );

                    $handle = $bc->draw();
                    $filename = 'barcodeSantader.png';
                    imagepng($handle, $filename);

                    $image = Zend_Pdf_Image::imageWithPath($filename);

                    $page1 = new Zend_Pdf_Page($template1);

                    $page1->setFont($font, 12)
                         ->drawText($santander->codigo_banco_com_dv, 164, 799)
                         ->drawText($santander->dadosboleto["linha_digitavel"], 231, 799);

                    $boletoProduto = $boletoRow->findDependentRowset('Application_Model_DbTable_BoletoProduto');

                    $fontProdutos = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_COURIER_BOLD);

                    $page1->setFont($fontProdutos, 10)
                           ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                           ->drawText("Produto", 40, 700, 'UTF-8')
                           ->drawText("Valor", 250, 700, 'UTF-8');

                    $posIniProd = 685;
                    $totalProduto = 0;
                    foreach ($boletoProduto as $boletoItemProduto)
                    {
                        $page1->setFont($fontProdutos, 7)
                           ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                           ->drawText($boletoItemProduto->produto, 40, $posIniProd, 'UTF-8')
                           ->drawText(number_format($boletoItemProduto->valor , 2, ',', '.'), 250, $posIniProd, 'UTF-8');
                        $posIniProd -= 10;
                        $totalProduto += $boletoItemProduto->valor;
                    }                                         

                    $page1->setFont($fontProdutos, 2)
                           ->setLineWidth(0.5)
                           ->drawLine(40, $posIniProd, 294, $posIniProd);

                    $page1->setFont($fontProdutos, 7)                           
                           ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                           ->drawText('TOTAL:', 40, $posIniProd - 14, 'UTF-8')
                           ->drawText(number_format($totalProduto , 2, ',', '.'), 250, $posIniProd - 14, 'UTF-8');

                    $page1->setFont($font, 8)
                         ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                         ->drawText($info->cedente, 40, 778, 'UTF-8')
                         ->drawText($info->agencia.'    '.$info->conta, 285, 778)
                         ->drawText($info->especie, 397, 778)
                         ->drawText($santander->dadosboleto["nosso_numero"], 509, 778)
                         ->drawText($santander->dadosboleto["numero_documento"], 40, 757)
                         ->drawText($info->cpf_cnpj, 200, 757)
                         ->drawText($santander->dadosboleto["data_vencimento"], 310, 757)
                         ->drawText($santander->dadosboleto["valor_boleto"], 537, 757)
                         ->drawText($boletoRow->demo1, 50, 412, 'UTF-8')
                         ->drawText($boletoRow->demo2, 50, 402, 'UTF-8')
                         ->drawText($boletoRow->demo3, 50, 392, 'UTF-8')
                         ->drawText($boletoRow->instru1, 50, 160, 'UTF-8')
                         ->drawText($boletoRow->instru2.' '.$boletoRow->instru3, 50, 150, 'UTF-8')
                         ->drawText($boletoRow->instru4, 50, 140, 'UTF-8')
                         ->drawText($boletoRow->instru5, 50, 130, 'UTF-8')
                         ->drawText($boletoRow->opcional, 50, 120, 'UTF-8')
                         ->drawImage($image, 28, 18, 370, 55);
                                           //esq, bai, dir, top
                    $vencimento = explode("-", $boletoRow->vencimento);

                    $page1->setFont($font, 8)
                         ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                         ->drawText($info->cedente, 40, 258, 'UTF-8')
                         ->drawText($vencimento[2].'/'.$vencimento[1].'/'.$vencimento[0], 528, 279, 'UTF-8')
                         ->drawText($info->agencia.'    '.$info->conta, 509, 259, 'UTF-8')
                         ->drawText($santander->dadosboleto["nosso_numero"], 509, 239, 'UTF-8')
                         ->drawText($santander->dadosboleto["valor_boleto"], 537, 219, 'UTF-8')
                         ->drawText(date("d/m/Y"), 40, 237, 'UTF-8')
                         ->drawText($santander->dadosboleto["numero_documento"], 170, 237, 'UTF-8')
                         ->drawText('', 325, 237, 'UTF-8')
                         ->drawText(date("d/m/Y"), 360, 237, 'UTF-8')
                         ->drawText($santander->dadosboleto["carteira_descricao"], 40, 217, 'UTF-8')
                         ->drawText($info->especie, 220, 217, 'UTF-8');

                    $font2 = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA_BOLD);

                    $page1->setFont($font, 12)
                         ->drawText($santander->codigo_banco_com_dv, 164, 300)
                         ->drawText($santander->dadosboleto["linha_digitavel"], 236, 300);

                    $page1->setFont($font2,8)
                          ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                          ->drawText($boletoRow->nome, 70, 369, 'UTF-8')
                          ->drawText($boletoRow->endereco, 70, 359, 'UTF-8')
                          ->drawText($boletoRow->cep.' - '.$boletoRow->cidade.' - '.$boletoRow->uf, 70, 348, 'UTF-8');

                    $page1->setFont($font2,8)
                          ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                          ->drawText($boletoRow->nome, 70, 97, 'UTF-8')
                          ->drawText($boletoRow->endereco, 70, 87, 'UTF-8')
                          ->drawText($boletoRow->cep.' - '.$boletoRow->cidade.' - '.$boletoRow->uf, 70, 76, 'UTF-8');

                    $page2 = new Zend_Pdf_Page($template2);
                    $page2->setFont($font2,8)
                          ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                          ->drawText($boletoRow->nome, 52, 397, 'UTF-8')
                          ->drawText($boletoRow->endereco, 52, 387, 'UTF-8')
                          ->drawText($boletoRow->cep.' - '.$boletoRow->cidade.' - '.$boletoRow->uf, 52, 376, 'UTF-8');

                    $cep = $boletoRow->cep;

                    if(!is_numeric($cep)){
                        $data = array();
                        $data['success'] = "Error no boleto $boletoRow->numero - Cep inválido: $cep";

                        $json = Zend_Json::encode($data);
                        echo $json;
                        exit();
                    }

                    if(strlen($cep) <> 8){
                        $data = array();
                        $data['success'] = "Error no boleto $boletoRow->numero - Cep inválido (falta dígitos): $cep";

                        $json = Zend_Json::encode($data);
                        echo $json;
                        exit();
                    }

                    $cepDig = $santander->modulo_10($cep);

                    $imageIni = Zend_Pdf_Image::imageWithPath("cepnet/startend.png");
                    $image1 = Zend_Pdf_Image::imageWithPath("cepnet/".substr($cep, 0, 1).".png");
                    $image2 = Zend_Pdf_Image::imageWithPath("cepnet/".substr($cep, 1, 1).".png");
                    $image3 = Zend_Pdf_Image::imageWithPath("cepnet/".substr($cep, 2, 1).".png");
                    $image4 = Zend_Pdf_Image::imageWithPath("cepnet/".substr($cep, 3, 1).".png");
                    $image5 = Zend_Pdf_Image::imageWithPath("cepnet/".substr($cep, 4, 1).".png");
                    $image6 = Zend_Pdf_Image::imageWithPath("cepnet/".substr($cep, 5, 1).".png");
                    $image7 = Zend_Pdf_Image::imageWithPath("cepnet/".substr($cep, 6, 1).".png");
                    $image8 = Zend_Pdf_Image::imageWithPath("cepnet/".substr($cep, 7, 1).".png");
                    $image9 = Zend_Pdf_Image::imageWithPath("cepnet/".$cepDig.".png");
                    $imageFim = Zend_Pdf_Image::imageWithPath("cepnet/startend.png");


                    $page2->drawImage($imageIni, 52, 407, 53, 419)
                          ->drawImage($image1, 55, 407, 67, 419)
                          ->drawImage($image2, 69, 407, 81, 419)
                          ->drawImage($image3, 83, 407, 95, 419)
                          ->drawImage($image4, 97, 407, 109, 419)
                          ->drawImage($image5, 111, 407, 123, 419)
                          ->drawImage($image6, 125, 407, 137, 419)
                          ->drawImage($image7, 139, 407, 151, 419)
                          ->drawImage($image8, 153, 407, 165, 419)
                          ->drawImage($image9, 167, 407, 179, 419)
                          ->drawImage($imageFim, 181, 407, 182, 419);
     


                    $pdf->pages[$paginaTpl1] = $page1;

                    $pdf->pages[$paginaTpl2] = $page2;
                    $pageIndex += 1;
                 }

                    unset($pdf->pages[0]);
                    $pdf->save("boletos$page.pdf");
                    $data = array();
                    $data['success'] = "Boletos".$page." gerado com sucesso. Link: http://benservi.com.br/sistema/interno/boletos$page.pdf";

                    $json = Zend_Json::encode($data);
                    echo $json;
                    //$this->_redirect("/boletos.pdf");

             } catch (Exception $e) {
                echo $e;
                echo print_r($boletoRow);
            }
    }


   
    /**
     * Função que controla a geração do boleto Banco do Brasil no sistema
     */
    public function geraboletobbAction()
    {
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender();
        try {
               // $codigo = $this->_request->getPost();

                $bb = new Benservi_Boleto_BancoBrasil();

                $codigobanco = '001';//$codigo['banco'];
               // $codigo_banco_com_dv = $boleto->geraCodigoBanco($codigobanco);

                $banco = new Application_Model_DbTable_Banco();
                $select = $banco->select()->where("codigo = ".$codigobanco);
                $bancoRow = $banco->fetchAll($select)->current();

                $pdf = Zend_Pdf::load($bancoRow->layout);
                $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
                $template1 = $pdf->pages[0];
                $template2 = $pdf->pages[1];

                $infoBanco = $bancoRow->findDependentRowSet("Application_Model_DbTable_DadosBanco");

                foreach ($infoBanco as $info)
                {
                    // DADOS PERSONALIZADOS - SANTANDER BANESPA
                    $bb->dadosboleto["conta"] = $conta = $info->conta; // Código do Cliente (PSK) (Somente 7 digitos)
                    $bb->dadosboleto["agencia"] = $agencia = $info->agencia; // Ponto de Venda = Agencia
                    $bb->dadosboleto["carteira"] = $carteira = $info->carteira;  // Cobrança Simples - SEM Registro
                    $bb->dadosboleto["variacao_carteira"] = "-019";  // Descrição da Carteira
                    $bb->dadosboleto["convenio"] = $conta = $info->convenio;
                    $bb->dadosboleto["contrato"] = $conta = $info->contrato;

                    // TIPO DO BOLETO
                    $bb->dadosboleto["formatacao_convenio"] = "7"; // REGRA: 8 p/ Convênio c/ 8 dígitos, 7 p/ Convênio c/ 7 dígitos, ou 6 se Convênio c/ 6 dígitos
                    $bb->dadosboleto["formatacao_nosso_numero"] = "2"; // REGRA: Usado apenas p/ Convênio c/ 6 dígitos: informe 1 se for NossoNúmero de até 5 dígitos ou 2 para opção de até 17 dígitos
                }

                $boleto = new Application_Model_DbTable_Boleto();

                $data = date("Y/m/d");

                $result = $boleto->select()->where('vencimento > "'.$data.'" and cep <> ""')->order('nome ASC');
                $total = $boleto->fetchAll($result)->count();
                $page = $this->_request->getParam('page');
                $paginator = Zend_Paginator::factory($result);
                $paginator->setItemCountPerPage($this->totalRegistros);
                $paginator->setCurrentPageNumber($page);

                $pageIndex = 0;
                foreach ($paginator as $boletoRow){
                    $pagina = $pageIndex + 1;
                    $paginaTpl1 = ($pagina * 2) -1;
                    $paginaTpl2 = $pagina * 2;

                    // DADOS DO BOLETO PARA O SEU CLIENTE
                    $bb->dadosboleto["nosso_numero"] = $boletoRow->numero;                    

                    $bb->dadosboleto["numero_documento"] = $boletoRow->numero;	// Num do pedido ou nosso numero
                    


                    $dias_de_prazo_para_pagamento = 5;

                    $data_venc = explode("-", $boletoRow->vencimento);                    

                    $bb->dadosboleto["data_vencimento"] = $data_venc[2].'/'.$data_venc[1].'/'.$data_venc[0]; // Data de Vencimento do Boleto - REGRA: Formato DD/MM/AAAA                    

                    $bb->dadosboleto["data_documento"] = date("d/m/Y"); // Data de emissão do Boleto
                    $bb->dadosboleto["data_processamento"] =  date("d/m/Y"); // Data de processamento do boleto (opcional)

                    $bb->dadosboleto["valor_boleto"] = number_format(str_replace(",", ".",$boletoRow->valor), 2, ',', ''); 	// Valor do Boleto - REGRA: Com vírgula e sempre com duas casas depois da virgula 


                    // ---------------------- DADOS FIXOS DE CONFIGURAÇÃO DO SEU BOLETO --------------- //
                    //

                    // SEUS DADOS
                    $bb->dadosboleto["identificacao"] = "BoletoPhp - Código Aberto de Sistema de Boletos";
                    $bb->dadosboleto["cpf_cnpj"] = "";
                    $bb->dadosboleto["endereco"] = "Coloque o endereço da sua empresa aqui";
                    $bb->dadosboleto["cidade_uf"] = "Cidade / Estado";
                    $bb->dadosboleto["cedente"] = "Coloque a Razão Social da sua empresa aqui";

                    $linha = $bb->factory();


                    $bc = Zend_Barcode::factory(
                        'Code25interleaved',
                        'image',
                        array(
                            'text' => $bb->dadosboleto["codigo_barras"],
                            'font' => 2,
                            'drawText' => FALSE
                        )
                    );

                    $handle = $bc->draw();
                    $filename = 'barcodeBb.png';
                    imagepng($handle, $filename);

                    $image = Zend_Pdf_Image::imageWithPath($filename);

                    $page1 = new Zend_Pdf_Page($template1);

                    $page1->setFont($font, 12)
                         ->drawText($bb->codigo_banco_com_dv, 164, 815)
                         ->drawText($bb->dadosboleto["linha_digitavel"], 235, 815);

                    $boletoProduto = $boletoRow->findDependentRowset('Application_Model_DbTable_BoletoProduto');

                    $fontProdutos = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_COURIER_BOLD);

                    $page1->setFont($fontProdutos, 10)
                           ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                           ->drawText("Produto", 40, 685, 'UTF-8')
                           ->drawText("Valor", 250, 685, 'UTF-8');

                    $posIniProd = 670;
                    $totalProduto = 0;
                    foreach ($boletoProduto as $boletoItemProduto)
                    {
                        $page1->setFont($fontProdutos, 7)
                           ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                           ->drawText($boletoItemProduto->produto, 40, $posIniProd, 'UTF-8')
                           ->drawText(number_format($boletoItemProduto->valor , 2, ',', '.'), 250, $posIniProd, 'UTF-8');
                        $posIniProd -= 10;
                        $totalProduto += $boletoItemProduto->valor;
                    }

                    $page1->setFont($fontProdutos, 2)
                           ->setLineWidth(0.5)
                           ->drawLine(40, $posIniProd, 294, $posIniProd);

                    $page1->setFont($fontProdutos, 7)
                           ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                           ->drawText('TOTAL:', 40, $posIniProd - 14, 'UTF-8')
                           ->drawText(number_format($totalProduto , 2, ',', '.'), 250, $posIniProd - 14, 'UTF-8');

                    $page1->setFont($font, 8)
                         ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                         ->drawText($info->cedente, 40, 776, 'UTF-8')
                         ->drawText($bb->dadosboleto["agencia_codigo"], 285, 776)
                         ->drawText($info->especie, 397, 776)
                         ->drawText($bb->dadosboleto["nosso_numero"], 494, 776)
                         ->drawText($bb->dadosboleto["numero_documento"], 40, 753)
                         ->drawText($info->cpf_cnpj, 200, 753)
                         ->drawText($bb->dadosboleto["data_vencimento"], 312, 753)
                         ->drawText($bb->dadosboleto["valor_boleto"], 537, 753)
                         ->drawText($boletoRow->demo1, 50, 445, 'UTF-8')
                         ->drawText($boletoRow->demo2, 50, 435, 'UTF-8')
                         ->drawText($boletoRow->demo3, 50, 425, 'UTF-8')
                         ->drawText($boletoRow->instru1, 50, 180, 'UTF-8')
                         ->drawText($boletoRow->instru2.' '.$boletoRow->instru3, 50, 170, 'UTF-8')
                         ->drawText($boletoRow->instru4, 50, 160, 'UTF-8')
                         ->drawText($boletoRow->instru5, 50, 150, 'UTF-8')
                         ->drawText($boletoRow->opcional, 50, 140, 'UTF-8')
                         ->drawImage($image, 28, 18, 370, 55);
                                           //esq, bai, dir, top
                    $vencimento = explode("-", $boletoRow->vencimento);

                    $page1->setFont($font, 8)
                         ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                         ->drawText($info->cedente, 40, 288, 'UTF-8')
                         ->drawText($vencimento[2].'/'.$vencimento[1].'/'.$vencimento[0], 524, 310, 'UTF-8')
                         ->drawText($bb->dadosboleto["agencia_codigo"], 489, 287, 'UTF-8')
                         ->drawText($bb->dadosboleto["nosso_numero"], 488, 262, 'UTF-8')
                         ->drawText($bb->dadosboleto["valor_boleto"], 537, 239, 'UTF-8')
                         ->drawText(date("d/m/Y"), 40, 262, 'UTF-8')
                         ->drawText($bb->dadosboleto["numero_documento"], 170, 262, 'UTF-8')
                         ->drawText('DM', 285, 262, 'UTF-8')
                         ->drawText('N', 333, 262, 'UTF-8')
                         ->drawText(date("d/m/Y"), 360, 262, 'UTF-8')
                         ->drawText($bb->dadosboleto["carteira_descricao"], 40, 217, 'UTF-8')
                         ->drawText($info->carteira, 148, 239, 'UTF-8')
                         ->drawText($info->especie, 215, 239, 'UTF-8');

                    $font2 = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA_BOLD);

                    $page1->setFont($font, 12)
                         ->drawText($bb->codigo_banco_com_dv, 163, 348)
                         ->drawText($bb->dadosboleto["linha_digitavel"], 230, 348);

                    $page1->setFont($font2,8)
                          ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                          ->drawText($boletoRow->nome, 70, 399, 'UTF-8')
                          ->drawText($boletoRow->endereco, 70, 389, 'UTF-8')
                          ->drawText($boletoRow->cep.' - '.$boletoRow->cidade.' - '.$boletoRow->uf, 70, 379, 'UTF-8');

                    $page1->setFont($font2,8)
                          ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                          ->drawText($boletoRow->nome, 70, 100, 'UTF-8')
                          ->drawText($boletoRow->endereco, 70, 90, 'UTF-8')
                          ->drawText($boletoRow->cep.' - '.$boletoRow->cidade.' - '.$boletoRow->uf, 70, 80, 'UTF-8');

                    $page2 = new Zend_Pdf_Page($template2);
                    $page2->setFont($font2,8)
                          ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                          ->drawText($boletoRow->nome, 52, 397, 'UTF-8')
                          ->drawText($boletoRow->endereco, 52, 387, 'UTF-8')
                          ->drawText($boletoRow->cep.' - '.$boletoRow->cidade.' - '.$boletoRow->uf, 52, 376, 'UTF-8');

                    $cep = $boletoRow->cep;

                    if(!is_numeric($cep)){                        
                        $data = array();
                        $data['success'] = "Error no boleto $boletoRow->numero - Cep inválido: $cep";

                        $json = Zend_Json::encode($data);
                        echo $json;
                        exit();
                    }

                    if(strlen($cep) <> 8){
                        $data = array();
                        $data['success'] = "Error no boleto $boletoRow->numero - Cep inválido (falta dígitos): $cep";

                        $json = Zend_Json::encode($data);
                        echo $json;
                        exit();
                    }

                    $cepDig = $bb->modulo_10($cep);

                    $imageIni = Zend_Pdf_Image::imageWithPath("cepnet/startend.png");
                    $image1 = Zend_Pdf_Image::imageWithPath("cepnet/".substr($cep, 0, 1).".png");
                    $image2 = Zend_Pdf_Image::imageWithPath("cepnet/".substr($cep, 1, 1).".png");
                    $image3 = Zend_Pdf_Image::imageWithPath("cepnet/".substr($cep, 2, 1).".png");
                    $image4 = Zend_Pdf_Image::imageWithPath("cepnet/".substr($cep, 3, 1).".png");
                    $image5 = Zend_Pdf_Image::imageWithPath("cepnet/".substr($cep, 4, 1).".png");
                    $image6 = Zend_Pdf_Image::imageWithPath("cepnet/".substr($cep, 5, 1).".png");
                    $image7 = Zend_Pdf_Image::imageWithPath("cepnet/".substr($cep, 6, 1).".png");
                    $image8 = Zend_Pdf_Image::imageWithPath("cepnet/".substr($cep, 7, 1).".png");
                    $image9 = Zend_Pdf_Image::imageWithPath("cepnet/".$cepDig.".png");
                    $imageFim = Zend_Pdf_Image::imageWithPath("cepnet/startend.png");


                    $page2->drawImage($imageIni, 52, 407, 53, 419)
                          ->drawImage($image1, 55, 407, 67, 419)
                          ->drawImage($image2, 69, 407, 81, 419)
                          ->drawImage($image3, 83, 407, 95, 419)
                          ->drawImage($image4, 97, 407, 109, 419)
                          ->drawImage($image5, 111, 407, 123, 419)
                          ->drawImage($image6, 125, 407, 137, 419)
                          ->drawImage($image7, 139, 407, 151, 419)
                          ->drawImage($image8, 153, 407, 165, 419)
                          ->drawImage($image9, 167, 407, 179, 419)
                          ->drawImage($imageFim, 181, 407, 182, 419);


                    $pdf->pages[$paginaTpl1] = $page1;

                    $pdf->pages[$paginaTpl2] = $page2;
                    $pageIndex += 1;
                 }

                    unset($pdf->pages[0]);
                    $pdf->save("boletos$page.pdf");
                    $data = array();
                    $data['success'] = "Boletos".$page." gerado com sucesso. Link: http://benservi.com.br/sistema/interno/boletos$page.pdf";

                    $json = Zend_Json::encode($data);
                    echo $json;
                    //$this->_redirect("/boletos.pdf");

             } catch (Exception $e) {
                echo $e;
                echo print_r($boletoRow);
            }
    }

   /**
    * Função de acesso apenas para usuario externo gerar o boleto
    */
    public function boletouserbbAction()
    {
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender();
        try {
               // $codigo = $this->_request->getPost();

                $bb = new Benservi_Boleto_BancoBrasil();

                $codigobanco = '001';//$codigo['banco'];
               // $codigo_banco_com_dv = $boleto->geraCodigoBanco($codigobanco);

                $banco = new Application_Model_DbTable_Banco();
                $select = $banco->select()->where("codigo = ".$codigobanco);
                $bancoRow = $banco->fetchAll($select)->current();

                $pdf = Zend_Pdf::load($bancoRow->layout);
                $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
                $template1 = $pdf->pages[0];           

                $infoBanco = $bancoRow->findDependentRowSet("Application_Model_DbTable_DadosBanco");

                foreach ($infoBanco as $info)
                {
                    // DADOS PERSONALIZADOS - SANTANDER BANESPA
                    $bb->dadosboleto["conta"] = $conta = $info->conta; // Código do Cliente (PSK) (Somente 7 digitos)
                    $bb->dadosboleto["agencia"] = $agencia = $info->agencia; // Ponto de Venda = Agencia
                    $bb->dadosboleto["carteira"] = $carteira = $info->carteira;  // Cobrança Simples - SEM Registro
                    $bb->dadosboleto["variacao_carteira"] = "-019";  // Descrição da Carteira
                    $bb->dadosboleto["convenio"] = $conta = $info->convenio;
                    $bb->dadosboleto["contrato"] = $conta = $info->contrato;

                    // TIPO DO BOLETO
                    $bb->dadosboleto["formatacao_convenio"] = "7"; // REGRA: 8 p/ Convênio c/ 8 dígitos, 7 p/ Convênio c/ 7 dígitos, ou 6 se Convênio c/ 6 dígitos
                    $bb->dadosboleto["formatacao_nosso_numero"] = "2"; // REGRA: Usado apenas p/ Convênio c/ 6 dígitos: informe 1 se for NossoNúmero de até 5 dígitos ou 2 para opção de até 17 dígitos
                }

                $boleto = new Application_Model_DbTable_Boleto();
                
                $numBoleto = $this->_request->getParam('numero');

                $result = $boleto->select()->where("numero = $numBoleto")->order('nome ASC');
                $total = $boleto->fetchAll($result)->count();
                $page = 1;
                $paginator = Zend_Paginator::factory($result);
                $paginator->setItemCountPerPage($this->totalRegistros);
                $paginator->setCurrentPageNumber($page);

                $pageIndex = 0;
                foreach ($paginator as $boletoRow){
                    $pagina = $pageIndex + 1;
                    $paginaTpl1 = ($pagina * 2) -1;                   

                    // DADOS DO BOLETO PARA O SEU CLIENTE
                    $bb->dadosboleto["nosso_numero"] = $boletoRow->numero;

                    $bb->dadosboleto["numero_documento"] = $boletoRow->numero;	// Num do pedido ou nosso numero



                    $dias_de_prazo_para_pagamento = 5;

                    $data_venc = explode("-", $boletoRow->vencimento);

                    $bb->dadosboleto["data_vencimento"] = $data_venc[2].'/'.$data_venc[1].'/'.$data_venc[0]; // Data de Vencimento do Boleto - REGRA: Formato DD/MM/AAAA

                    $bb->dadosboleto["data_documento"] = date("d/m/Y"); // Data de emissão do Boleto
                    $bb->dadosboleto["data_processamento"] =  date("d/m/Y"); // Data de processamento do boleto (opcional)

                    $bb->dadosboleto["valor_boleto"] = number_format(str_replace(",", ".",$boletoRow->valor), 2, ',', ''); 	// Valor do Boleto - REGRA: Com vírgula e sempre com duas casas depois da virgula


                    // ---------------------- DADOS FIXOS DE CONFIGURAÇÃO DO SEU BOLETO --------------- //
                    //

                    // SEUS DADOS
                    $bb->dadosboleto["identificacao"] = "BoletoPhp - Código Aberto de Sistema de Boletos";
                    $bb->dadosboleto["cpf_cnpj"] = "";
                    $bb->dadosboleto["endereco"] = "Coloque o endereço da sua empresa aqui";
                    $bb->dadosboleto["cidade_uf"] = "Cidade / Estado";
                    $bb->dadosboleto["cedente"] = "Coloque a Razão Social da sua empresa aqui";

                    $linha = $bb->factory();


                    $bc = Zend_Barcode::factory(
                        'Code25interleaved',
                        'image',
                        array(
                            'text' => $bb->dadosboleto["codigo_barras"],
                            'font' => 2,
                            'drawText' => FALSE
                        )
                    );

                    $handle = $bc->draw();
                    $filename = 'barcodeBb.png';
                    imagepng($handle, $filename);

                    $image = Zend_Pdf_Image::imageWithPath($filename);

                    $page1 = new Zend_Pdf_Page($template1);

                    $page1->setFont($font, 12)
                         ->drawText($bb->codigo_banco_com_dv, 164, 815)
                         ->drawText($bb->dadosboleto["linha_digitavel"], 235, 815);

                    $boletoProduto = $boletoRow->findDependentRowset('Application_Model_DbTable_BoletoProduto');

                    $fontProdutos = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_COURIER_BOLD);

                    $page1->setFont($fontProdutos, 10)
                           ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                           ->drawText("Produto", 40, 685, 'UTF-8')
                           ->drawText("Valor", 250, 685, 'UTF-8');

                    $posIniProd = 670;
                    $totalProduto = 0;
                    foreach ($boletoProduto as $boletoItemProduto)
                    {
                        $page1->setFont($fontProdutos, 7)
                           ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                           ->drawText($boletoItemProduto->produto, 40, $posIniProd, 'UTF-8')
                           ->drawText(number_format($boletoItemProduto->valor , 2, ',', '.'), 250, $posIniProd, 'UTF-8');
                        $posIniProd -= 10;
                        $totalProduto += $boletoItemProduto->valor;
                    }

                    $page1->setFont($fontProdutos, 2)
                           ->setLineWidth(0.5)
                           ->drawLine(40, $posIniProd, 294, $posIniProd);

                    $page1->setFont($fontProdutos, 7)
                           ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                           ->drawText('TOTAL:', 40, $posIniProd - 14, 'UTF-8')
                           ->drawText(number_format($totalProduto , 2, ',', '.'), 250, $posIniProd - 14, 'UTF-8');

                    $page1->setFont($font, 8)
                         ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                         ->drawText($info->cedente, 40, 776, 'UTF-8')
                         ->drawText($bb->dadosboleto["agencia_codigo"], 285, 776)
                         ->drawText($info->especie, 397, 776)
                         ->drawText($bb->dadosboleto["nosso_numero"], 494, 776)
                         ->drawText($bb->dadosboleto["numero_documento"], 40, 753)
                         ->drawText($info->cpf_cnpj, 200, 753)
                         ->drawText($bb->dadosboleto["data_vencimento"], 312, 753)
                         ->drawText($bb->dadosboleto["valor_boleto"], 537, 753)
                         ->drawText($boletoRow->demo1, 50, 445, 'UTF-8')
                         ->drawText($boletoRow->demo2, 50, 435, 'UTF-8')
                         ->drawText($boletoRow->demo3, 50, 425, 'UTF-8')
                         ->drawText($boletoRow->instru1, 50, 180, 'UTF-8')
                         ->drawText($boletoRow->instru2.' '.$boletoRow->instru3, 50, 170, 'UTF-8')
                         ->drawText($boletoRow->instru4, 50, 160, 'UTF-8')
                         ->drawText($boletoRow->instru5, 50, 150, 'UTF-8')
                         ->drawText($boletoRow->opcional, 50, 140, 'UTF-8')
                         ->drawImage($image, 28, 18, 370, 55);
                                           //esq, bai, dir, top
                    $vencimento = explode("-", $boletoRow->vencimento);

                    $page1->setFont($font, 8)
                         ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                         ->drawText($info->cedente, 40, 288, 'UTF-8')
                         ->drawText($vencimento[2].'/'.$vencimento[1].'/'.$vencimento[0], 524, 310, 'UTF-8')
                         ->drawText($bb->dadosboleto["agencia_codigo"], 489, 287, 'UTF-8')
                         ->drawText($bb->dadosboleto["nosso_numero"], 488, 262, 'UTF-8')
                         ->drawText($bb->dadosboleto["valor_boleto"], 537, 239, 'UTF-8')
                         ->drawText(date("d/m/Y"), 40, 262, 'UTF-8')
                         ->drawText($bb->dadosboleto["numero_documento"], 170, 262, 'UTF-8')
                         ->drawText('DM', 285, 262, 'UTF-8')
                         ->drawText('N', 333, 262, 'UTF-8')
                         ->drawText(date("d/m/Y"), 360, 262, 'UTF-8')
                         ->drawText($bb->dadosboleto["carteira_descricao"], 40, 217, 'UTF-8')
                         ->drawText($info->carteira, 148, 239, 'UTF-8')
                         ->drawText($info->especie, 215, 239, 'UTF-8');

                    $font2 = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA_BOLD);

                    $page1->setFont($font, 12)
                         ->drawText($bb->codigo_banco_com_dv, 163, 348)
                         ->drawText($bb->dadosboleto["linha_digitavel"], 230, 348);

                    $page1->setFont($font2,8)
                          ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                          ->drawText($boletoRow->nome, 70, 399, 'UTF-8')
                          ->drawText($boletoRow->endereco, 70, 389, 'UTF-8')
                          ->drawText($boletoRow->cep.' - '.$boletoRow->cidade.' - '.$boletoRow->uf, 70, 379, 'UTF-8');

                    $page1->setFont($font2,8)
                          ->setFillColor(Zend_Pdf_Color_Html::color('#000000'))
                          ->drawText($boletoRow->nome, 70, 100, 'UTF-8')
                          ->drawText($boletoRow->endereco, 70, 90, 'UTF-8')
                          ->drawText($boletoRow->cep.' - '.$boletoRow->cidade.' - '.$boletoRow->uf, 70, 80, 'UTF-8');

                  
                    $pdf->pages[$paginaTpl1] = $page1;                   
                    $pageIndex += 1;
                 }

                    unset($pdf->pages[0]);                    
                    $pdf->save("boletos/".sha1($numBoleto).".pdf");
                    $this->_redirect("/boletos/".sha1($numBoleto).".pdf");

             } catch (Exception $e) {
                echo $e;
                echo print_r($boletoRow);
            }
    }

    /**
     * Função que busca os boletos pertencentes a um CPF
     */
    public function buscaboletoAction()
    {
        $this->_helper->layout->setLayout("layout2");
        $boleto = new Application_Model_DbTable_Boleto();

        $cpf = addslashes($this->_request->getParam('CPF'));
        if(is_numeric($cpf)){
            if($cpf <> ''){
                $select = $boleto->select()->where("cpf = $cpf")->order('vencimento ASC');
                $boletoRow = $boleto->fetchAll($select);
                $boletoTotal = $boleto->fetchAll($select)->count();

                if($boletoTotal > 0){
                    $this->view->boletos = $boletoRow;
                    $this->view->cpf = $cpf;
                }
                else{
                    $this->view->status = "Nenhum boleto localizado para o CPF ".$cpf;
                }
            }
            else{
                $this->view->status = "Por favor informe um número de CPF";
            }
        }
        else{
                $this->view->status = "Por favor informe um número de CPF";
        }
        
    }

    /**
     * Função que controla a geraçao de boletos
     */   
    public function geraboletoAction()
    {
        $form = new Benservi_Forms_Boleto();        

        $boleto = new Application_Model_DbTable_Boleto();
        $data=date("Y/m/d");
        $result = $boleto->select()->where('vencimento > "'.$data.'" and cep <> ""')->order('nome ASC');
        $total = $boleto->fetchAll($result)->count();
        $paginas = ceil($total/$this->totalRegistros);

        $breadcumb_1 = $this->getRequest()->getControllerName();
        $breadcumb_2 = 'Gerar Boletos';
        if($this->_request->isPost()){
          if ($form->isValid($this->_request->getPost())) {
              $banco = $this->_request->getParam('banco');

              if($banco == 33 )
                   $this->geraboletosantanderAction ();
              if($banco == 1)
                  $this->geraboletobbAction ();
         }
        }
       $request = Zend_Controller_Front::getInstance()->getRequest();
       $this->view->baseUrl = $request->getBaseUrl();
       $this->view->form = $form;
       $this->view->paginas = $paginas;
       $this->view->totalBoletos = $total;
       $this->view->breadcump1 = strtoupper($breadcumb_1);
       $this->view->breadcump2 = $breadcumb_2;
    }
}






